1 Introduction: Mapping of broad research field around EIST in v2

Here are preliminary results of the bibliometric mapping of EIST. Its purpose is:

The method for the research-field-mapping can be reviewed here:

Rakas, M., & Hain, D. S. (2019). The state of innovation system research: What happens beneath the surface?. Research Policy, 48(9), 103787.

Note: The analysis in this document depicts the larger research field around the department, thereby all analysis results are based on the publications of the department plus related

2 General Overview over the research field

Note: This section provides basic descriptives of th identified research fielld, including number of articles over time, countries, institutions, and authors. See Technical descriptionfor additional explanations.

2.1 Main Indicators: Publications, Authors, Countries

2.2 Connection between the research field’s Top Authors-Keywords-Journals

3 Topic modelling

Note: Here, we report the results of a LDA topic-modelling (basically, clustering on words) on all title+abstract texts. Identified topics can be interpreted as broad themes in the research field. See Technical descriptionfor additional explanations.

3.1 Topics by topwords

Note: While this static vies is helpful, I recommend using the interactive LDAVis version to be found under https://daniel-hain.github.io/biblio_lux_2022/output/topic_modelling/LDAviz_eist_v2/index.html#topic=1&lambda=0.60&term=. For functionality and usage, see ´Technical ´.

`summarise()` has grouped output by 'PY'. You can override using the `.groups` argument.

`summarise()` has grouped output by 'label'. You can override using the `.groups` argument.

4 Knowledge Bases: Co-Citation network analysis

Note: This analysis refers the co-citation analysis, where the cited references and not the original publications are the unit of analysis. Identified knowledge bases can be interpreted as the knowledge foundation the field draws from. See Technical descriptionfor additional explanations.

name dgr_int dgr
Knowledge Base 1: KB 1: unlabeled (n = 137, density =15.92)
MARKARD J. RAVEN R. TRUFFER B. SUSTAINABILITY TRANSITIONS: AN EMERGING FIELD OF RESEARCH AND ITS PROSPECTS. RES. POLICY 41:6 (2012) 363 410
GEELS F.W. SCHOT J. TYPOLOGY OF SOCIOTECHNICAL TRANSITION PATHWAYS. RES. POLICY 36:3 (2007) 259 294
SMITH A. RAVEN R. WHAT IS PROTECTIVE SPACE? RECONSIDERING NICHES IN TRANSITIONS TO SUSTAINABILITY. RES. POLICY 41:6 (2012) 171 217
BERGEK A. JACOBSSON S. CARLSSON B. LINDMARK S. RICKNE A. ANALYZING THE FUNCTIONAL DYNAMICS OF TECHNOLOGICAL INNOVATION SYSTEMS: A SCHEME OF ANALYSI... 130 133
KIVIMAA P. KERN F. CREATIVE DESTRUCTION OR MERE NICHE SUPPORT? INNOVATION POLICY MIXES FOR SUSTAINABILITY TRANSITIONS. RES. POLICY 45:1 (2016) 118 141
GEELS F.W. TECHNOLOGICAL TRANSITIONS AS EVOLUTIONARY RECONFIGURATION PROCESSES: A MULTI-LEVEL PERSPECTIVE AND A CASE-STUDY. RES. POLICY 31:8–9 (2002) 108 111
SMITH A. STIRLING A. BERKHOUT F. THE GOVERNANCE OF SUSTAINABLE SOCIO-TECHNICAL TRANSITIONS. RES. POLICY 34:10 (2005) 107 131
COENEN L. BENNEWORTH P. TRUFFER B. TOWARD A SPATIAL PERSPECTIVE ON SUSTAINABILITY TRANSITIONS. RES. POLICY 41:6 (2012) 91 111
GEELS F.W. REGIME RESISTANCE AGAINST LOW-CARBON TRANSITIONS: INTRODUCING POLITICS AND POWER INTO THE MULTI-LEVEL PERSPECTIVE. THEORY CULT. SOC. 31:... 73 91
KEMP R. SCHOT J. HOOGMA R. REGIME SHIFTS TO SUSTAINABILITY THROUGH PROCESSES OF NICHE FORMATION: THE APPROACH OF STRATEGIC NICHE MANAGEMENT. TECHNO... 66 77
Knowledge Base 2: KB 2: unlabeled (n = 126, density =17.42)
GEELS F.W. TECHNOLOGICAL TRANSITIONS AS EVOLUTIONARY RECONFIGURATION PROCESSES: A MULTI-LEVEL PERSPECTIVE AND A CASE-STUDY. RES. POLICY 31 (2002) 357 581
GEELS F.W. SCHOT J. TYPOLOGY OF SOCIOTECHNICAL TRANSITION PATHWAYS. RES. POLICY 36 (2007) 297 462
MARKARD J. RAVEN R. TRUFFER B. SUSTAINABILITY TRANSITIONS: AN EMERGING FIELD OF RESEARCH AND ITS PROSPECTS. RES. POLICY 41 (2012) 182 355
SMITH A. RAVEN R. WHAT IS PROTECTIVE SPACE? RECONSIDERING NICHES IN TRANSITIONS TO SUSTAINABILITY. RES. POLICY 41 (2012) 177 296
KEMP R. SCHOT J. HOOGMA R. REGIME SHIFTS TO SUSTAINABILITY THROUGH PROCESSES OF NICHE FORMATION: THE APPROACH OF STRATEGIC NICHE MANAGEMENT. TECHNO... 117 165
GEELS F.W. ONTOLOGIES SOCIO-TECHNICAL TRANSITIONS (TO SUSTAINABILITY) 110 207
GEELS F.W. THE MULTI-LEVEL PERSPECTIVE ON SUSTAINABILITY TRANSITIONS: RESPONSES TO SEVEN CRITICISMS. ENVIRON. INNOV. SOC. TRANSIT. 1 (2011) 106 179
SCHOT J. GEELS F.W. STRATEGIC NICHE MANAGEMENT AND SUSTAINABLE INNOVATION JOURNEYS: THEORY FINDINGS RESEARCH AGENDA AND POLICY. TECHNOL. ANAL. STRA... 89 125
FARLA J. MARKARD J. RAVEN R. COENEN L. SUSTAINABILITY TRANSITIONS IN THE MAKING: A CLOSER LOOK AT ACTORS STRATEGIES AND RESOURCES. TECHNOL. FORECAS... 80 146
SMITH A. VOß J.P. GRIN J. INNOVATION STUDIES AND SUSTAINABILITY TRANSITIONS: THE ALLURE OF THE MULTI-LEVEL PERSPECTIVE AND ITS CHALLENGES. RES. POL... 64 71
Knowledge Base 3: KB 3: unlabeled (n = 44, density =52.64)
TURNHEIM B. GEELS F.W. THE DESTABILISATION OF EXISTING REGIMES: CONFRONTING A MULTI-DIMENSIONAL FRAMEWORK WITH A CASE STUDY OF THE BRITISH COAL IND... 91 180
BERGGREN C. MAGNUSSON T. SUSHANDOYO D. TRANSITION PATHWAYS REVISITED: ESTABLISHED FIRMS AS MULTI-LEVEL ACTORS IN THE HEAVY VEHICLE INDUSTRY. RES. P... 85 128
GEELS F.W. REGIME RESISTANCE AGAINST LOW-CARBON TRANSITIONS: INTRODUCING POLITICS AND POWER INTO THE MULTI-LEVEL PERSPECTIVE. THEORY CULT. SOC. 31 ... 75 208
KUNGL G. GEELS F.W. SEQUENCE AND ALIGNMENT OF EXTERNAL PRESSURES IN INDUSTRY DESTABILISATION: UNDERSTANDING THE DOWNFALL OF INCUMBENT UTILITIES IN ... 66 88
SMITH A. STIRLING A. BERKHOUT F. THE GOVERNANCE OF SUSTAINABLE SOCIO-TECHNICAL TRANSITIONS. RES. POLICY 34 (2005) 64 176
BERGEK A. BERGGREN C. MAGNUSSON T. HOBDAY M. TECHNOLOGICAL DISCONTINUITIES AND THE CHALLENGE FOR INCUMBENT FIRMS: DESTRUCTION DISRUPTION OR CREATIV... 51 68
PENNA C.C.R. GEELS F.W. MULTI-DIMENSIONAL STRUGGLES IN THE GREENING OF INDUSTRY: A DIALECTIC ISSUE LIFECYCLE MODEL AND CASE STUDY. TECHNOL. FORECAS... 50 65
GEELS F.W. RECONCEPTUALISING THE CO-EVOLUTION OF FIRMS-IN-INDUSTRIES AND THEIR ENVIRONMENTS: DEVELOPING AN INTER-DISCIPLINARY TRIPLE EMBEDDEDNESS F... 45 86
STIRLING A. TRANSFORMING POWER: SOCIAL SCIENCE AND THE POLITICS OF ENERGY CHOICES. ENERGY RES. SOC. SCI. 1 (2014) 34 37
STEEN M. WEAVER T. INCUMBENTS’ DIVERSIFICATION AND CROSS-SECTORIAL ENERGY INDUSTRY DYNAMICS. RES. POLICY 46 (2017) 31 38
Knowledge Base 4: KB 4: unlabeled (n = 34, density =44.03)
HANSEN T. COENEN L. THE GEOGRAPHY OF SUSTAINABILITY TRANSITIONS: REVIEW SYNTHESIS AND REFLECTIONS ON AN EMERGENT RESEARCH FIELD. ENVIRON. INNOV. SO... 70 134
COENEN L. BENNEWORTH P. TRUFFER B. TOWARD A SPATIAL PERSPECTIVE ON SUSTAINABILITY TRANSITIONS. RES. POLICY 41 (2012) 60 191
HODSON M. MARVIN S. CAN CITIES SHAPE SOCIO-TECHNICAL TRANSITIONS AND HOW WOULD WE KNOW IF THEY WERE?. RES. POLICY 39 (2010) 35 56
RAVEN R. SCHOT J. BERKHOUT F. SPACE AND SCALE IN SOCIO-TECHNICAL TRANSITIONS. ENVIRON. INNOV. SOC. TRANSIT. 4 (2012) 34 49
COENEN L. TRUFFER B. PLACES AND SPACES OF SUSTAINABILITY TRANSITIONS: GEOGRAPHICAL CONTRIBUTIONS TO AN EMERGING RESEARCH AND POLICY FIELD. EUR. PLA... 29 29
SENGERS F. RAVEN R. TOWARD A SPATIAL PERSPECTIVE ON NICHE DEVELOPMENT: THE CASE OF BUS RAPID TRANSIT. ENVIRON. INNOV. SOC. TRANSIT. 17 (2015) 26 30
TRUFFER B. MURPHY J.T. RAVEN R. THE GEOGRAPHY OF SUSTAINABILITY TRANSITIONS: CONTOURS OF AN EMERGING THEME. ENVIRON. INNOV. SOC. TRANSIT. 17 (2015) 25 36
KÖHLER J. GEELS F.W. KERN F. MARKARD J. ONSONGO E. WIECZOREK A. ALKEMADE F. AVELINO F. BERGEK A. BOONS F. FÜNFSCHILLING L. HESS D. HOLTZ G. HYYSALO... 22 35
BRIDGE G. BOUZAROVSKI S. BRADSHAW M. EYRE N. GEOGRAPHIES OF ENERGY TRANSITION: SPACE PLACE AND THE LOW-CARBON ECONOMY. ENERGY POLICY 53 (2013) 21 35
RUTHERFORD J. COUTARD O. URBAN ENERGY TRANSITIONS: PLACES PROCESSES AND POLITICS OF SOCIO-TECHNICAL CHANGE. URBAN STUD. 51 (2014) 18 27
Knowledge Base 5: KB 5: unlabeled (n = 33, density =63.26)
HOWELLS J. INTERMEDIATION AND THE ROLE OF INTERMEDIARIES IN INNOVATION. RES. POLICY 35 (2006) 81 91
KIVIMAA P. BOON W. HYYSALO S. KLERKX L. TOWARDS A TYPOLOGY OF INTERMEDIARIES IN SUSTAINABILITY TRANSITIONS: A SYSTEMATIC REVIEW AND A RESEARCH AGEN... 55 87
KIVIMAA P. GOVERNMENT-AFFILIATED INTERMEDIARY ORGANISATIONS AS ACTORS IN SYSTEM-LEVEL TRANSITIONS. RES. POLICY 43 (2014) 53 60
MIGNON I. KANDA W. A TYPOLOGY OF INTERMEDIARY ORGANIZATIONS AND THEIR IMPACT ON SUSTAINABILITY TRANSITION POLICIES. ENVIRON. INNOV. SOC. TRANSIT. 2... 44 44
BESSANT J. RUSH H. BUILDING BRIDGES FOR INNOVATION: THE ROLE OF CONSULTANTS IN TECHNOLOGY TRANSFER. RES. POLICY 24 (1995) 43 43
KLERKX L. LEEUWIS C. BALANCING MULTIPLE INTERESTS: EMBEDDING INNOVATION INTERMEDIATION IN THE AGRICULTURAL KNOWLEDGE INFRASTRUCTURE. TECHNOVATION 2... 43 43
POLZIN F. VON FLOTOW P. KLERKX L. ADDRESSING BARRIERS TO ECO-INNOVATION: EXPLORING THE FINANCE MOBILISATION FUNCTIONS OF INSTITUTIONAL INNOVATION I... 38 41
KIVIMAA P. MARTISKAINEN M. DYNAMICS OF POLICY CHANGE AND INTERMEDIATION: THE ARDUOUS TRANSITION TOWARDS LOW-ENERGY HOMES IN THE UNITED KINGDOM. ENE... 31 37
GLIEDT T. HOICKA C.E. JACKSON N. INNOVATION INTERMEDIARIES ACCELERATING ENVIRONMENTAL SUSTAINABILITY TRANSITIONS. J. CLEAN. PROD. 174 (2018) 28 28
KLERKX L. LEEUWIS C. ESTABLISHMENT AND EMBEDDING OF INNOVATION BROKERS AT DIFFERENT INNOVATION SYSTEM LEVELS: INSIGHTS FROM THE DUTCH AGRICULTURAL ... 24 24
Knowledge Base 6: KB 6: unlabeled (n = 30, density =63.68)
BERGEK A. JACOBSSON S. CARLSSON B. LINDMARK S. RICKNE A. ANALYZING THE FUNCTIONAL DYNAMICS OF TECHNOLOGICAL INNOVATION SYSTEMS: A SCHEME OF ANALYSI... 96 167
MARKARD J. TRUFFER B. TECHNOLOGICAL INNOVATION SYSTEMS AND THE MULTI-LEVEL PERSPECTIVE: TOWARDS AN INTEGRATED FRAMEWORK. RES. POLICY 37 (2008) 68 131
GEELS F.W. FROM SECTORAL SYSTEMS OF INNOVATION TO SOCIO-TECHNICAL SYSTEMS: INSIGHTS ABOUT DYNAMICS AND CHANGE FROM SOCIOLOGY AND INSTITUTIONAL THEO... 40 223
CARLSSON B. STANKIEWICZ R. ON THE NATURE FUNCTION AND COMPOSITION OF TECHNOLOGICAL SYSTEMS. J. EVOL. ECON. 1 (1991) 40 47
BERGEK A. HEKKERT M. JACOBSSON S. MARKARD J. SANDÉN B. TRUFFER B. TECHNOLOGICAL INNOVATION SYSTEMS IN CONTEXTS: CONCEPTUALIZING CONTEXTUAL STRUCTUR... 40 48
HEKKERT M.P. SUURS R.A.A. NEGRO S.O. KUHLMANN S. SMITS R.E.H.M. FUNCTIONS OF INNOVATION SYSTEMS: A NEW APPROACH FOR ANALYSING TECHNOLOGICAL CHANGE.... 38 64
WIECZOREK A.J. HEKKERT M.P. SYSTEMIC INSTRUMENTS FOR SYSTEMIC INNOVATION PROBLEMS: A FRAMEWORK FOR POLICY MAKERS AND INNOVATION SCHOLARS. SCI. PUBL... 38 47
BINZ C. TRUFFER B. GLOBAL INNOVATION SYSTEMS—A CONCEPTUAL FRAMEWORK FOR INNOVATION DYNAMICS IN TRANSNATIONAL CONTEXTS. RES. POLICY 46 (2017) 35 38
JACOBSSON S. BERGEK A. INNOVATION SYSTEM ANALYSES AND SUSTAINABILITY TRANSITIONS: CONTRIBUTIONS AND SUGGESTIONS FOR RESEARCH. ENVIRON. INNOV. SOC. ... 18 18
JACOBSSON S. JOHNSON A. THE DIFFUSION OF RENEWABLE ENERGY TECHNOLOGY: AN ANALYTICAL FRAMEWORK AND KEY ISSUES FOR RESEARCH. ENERGY POLICY 28 (2000) 15 18

5 Research Areas: Bibliographic coupling analysis

Note: This analysis refers the bibliographic coupling analysis, where original publications are the unit of analysis. Identified research areas can be interpreted as the field’s current research frontier. See Technical descriptionfor additional explanations.

`summarise()` has grouped output by 'label'. You can override using the `.groups` argument.

Warning: Ignoring unknown parameters: `strenght`

6 Knowledge Bases, Research Areas & Topics Interaction

6.1 Joint Overview over Knowledge Bases, Research Areas, and Topics

This plot shows the connection of publications in the research areas to knowledge bases (by citations) and topics (by gamma, document-topic weight)

8 Collaboration

8.1 Collaboration network

9 Endnotes

R version 4.2.1 (2022-06-23)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Ventura 13.2.1

Matrix products: default
LAPACK: /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] directlabels_2021.1.13 RColorBrewer_1.1-3     kableExtra_1.3.4       knitr_1.40             patchwork_1.1.2        ggrepel_0.9.1         
 [7] ggforce_0.4.1          plotly_4.10.1          ggraph_2.1.0           widyr_0.1.5            tsne_0.1-3.1           LDAvis_0.3.2          
[13] ldatuning_1.0.2        textstem_0.1.4         koRpus.lang.en_0.1-4   koRpus_0.13-8          sylly_0.1-6            topicmodels_0.2-12    
[19] tidytext_0.3.4         RNewsflow_1.2.6        Matrix_1.5-1           tm_0.7-9               NLP_0.2-1              igraph_1.3.5          
[25] tidygraph_1.2.2        bibliometrix_4.1.0     magrittr_2.0.3         forcats_0.5.2          stringr_1.4.1          dplyr_1.0.10          
[31] purrr_0.3.5            readr_2.1.3            tidyr_1.2.1            tibble_3.1.8           ggplot2_3.4.0          tidyverse_1.3.2       

loaded via a namespace (and not attached):
  [1] readxl_1.4.1           backports_1.4.1        systemfonts_1.0.4      servr_0.25             plyr_1.8.8             lazyeval_0.2.2        
  [7] crosstalk_1.2.0        SnowballC_0.7.0        digest_0.6.30          htmltools_0.5.3        viridis_0.6.2          fansi_1.0.3           
 [13] googlesheets4_1.0.1    cluster_2.1.3          tzdb_0.3.0             openxlsx_4.2.5.1       graphlayouts_0.8.3     modelr_0.1.9          
 [19] vroom_1.6.0            svglite_2.1.0          colorspace_2.0-3       rvest_1.0.3            pubmedR_0.0.3          haven_2.5.1           
 [25] xfun_0.34              crayon_1.5.2           jsonlite_1.8.3         bibliometrixData_0.3.0 glue_1.6.2             polyclip_1.10-4       
 [31] gtable_0.3.1           gargle_1.2.1           emmeans_1.8.2          webshot_0.5.4          rentrez_1.2.3          scales_1.2.1          
 [37] mvtnorm_1.1-3          DBI_1.1.3              Rcpp_1.0.9             viridisLite_0.4.1      xtable_1.8-4           dimensionsR_0.0.3     
 [43] flashClust_1.01-2      bit_4.0.5              stats4_4.2.1           DT_0.26                htmlwidgets_1.5.4      httr_1.4.4            
 [49] ellipsis_0.3.2         modeltools_0.2-23      factoextra_1.0.7       pkgconfig_2.0.3        XML_3.99-0.12          farver_2.1.1          
 [55] sass_0.4.2             multcompView_0.1-8     dbplyr_2.2.1           utf8_1.2.2             RJSONIO_1.3-1.7        tidyselect_1.2.0      
 [61] labeling_0.4.2         rlang_1.0.6            reshape2_1.4.4         later_1.3.0            cachem_1.0.6           munsell_0.5.0         
 [67] cellranger_1.1.0       tools_4.2.1            cli_3.4.1              generics_0.1.3         corrr_0.4.4            broom_1.0.1           
 [73] evaluate_0.17          fastmap_1.1.0          yaml_2.3.6             bit64_4.0.5            fs_1.5.2               zip_2.2.2             
 [79] mime_0.12              slam_0.1-50            leaps_3.1              xml2_1.3.3             tokenizers_0.2.3       compiler_4.2.1        
 [85] rstudioapi_0.14        reprex_2.0.2           syuzhet_1.0.6          tweenr_2.0.2           bslib_0.4.0            stringi_1.7.8         
 [91] highr_0.9              lattice_0.20-45        vctrs_0.5.1            stringdist_0.9.10      pillar_1.8.1           lifecycle_1.0.3       
 [97] rscopus_0.6.6          jquerylib_0.1.4        estimability_1.4.1     data.table_1.14.4      httpuv_1.6.6           sylly.en_0.1-3        
[103] R6_2.5.1               promises_1.2.0.1       gridExtra_2.3          janeaustenr_1.0.0      lexicon_1.2.1          MASS_7.3-57           
[109] assertthat_0.2.1       withr_2.5.0            parallel_4.2.1         hms_1.1.2              quadprog_1.5-8         grid_4.2.1            
[115] rmarkdown_2.17         googledrive_2.0.0      scatterplot3d_0.3-42   shiny_1.7.3            lubridate_1.8.0        FactoMineR_2.6        

—>

LS0tCnRpdGxlOiAiRUlTVCBNYXBwaW5nIDIwMjI6IEZpZWxkIE1hcHBpbmcgb2YgS25vd2xlZGdlIFN0cnVjdHVyZSIKYXV0aG9yOiAiRGFuaWVsIFMuIEhhaW4iCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogZmxhdGx5CiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGRmX3ByaW50OiBwYWdlZAogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICB0b2M6IGZhbHNlCiAgICB0b2NfZGVwdGg6IDMKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiBmYWxzZQpwYXJhbXM6CiAgICBpbnN0aXR1dGU6IAogICAgICAgdmFsdWU6IG51bGwKICAgIGRlcGFydG1lbnQ6CiAgICAgICB2YWx1ZTogbnVsbAotLS0KCjwhLS0tCiMgQWRkIHRvIFlBTUwgd2hlbiBjb21waWxpbmcgaHRtbCAtLTwgd2hlbiByZXZpZXdpbmcgY2hhbmdlIGZpcnN0IGxpbmUgdG86IGh0bWxfbm90ZWJvb2sKICBodG1sX2RvY3VtZW50OgogICAgdGhlbWU6IGZsYXRseQogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBkZl9wcmludDogcGFnZWQKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgdG9jOiBmYWxzZQogICAgdG9jX2RlcHRoOiAzCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogZmFsc2UKCiMgQWRkIHdoZW4gY29tcGlsaW5nIHBkZgojIEFkZCB0byBZQU1MIHdoZW4gY29tcGlsaW5nIGh0bWwKICAgYm9va2Rvd246OnBkZl9kb2N1bWVudDI6IAogICAgZmlnX2NhcHRpb246IHRydWUKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgZ2xvYmFsX251bWJlcmluZzogdHJ1ZQotLS0+CgoKYGBgez1odG1sfQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoubWFpbi1jb250YWluZXIgewogIG1heC13aWR0aDogMTIwMHB4OwogIG1hcmdpbi1sZWZ0OiBhdXRvOwogIG1hcmdpbi1yaWdodDogYXV0bzsKfQo8L3N0eWxlPgpgYGAKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQojIyMgR2VuZXJpYyBwcmVhbWJsZQojcm0obGlzdD1scygpKQpTeXMuc2V0ZW52KExBTkcgPSAiZW4iKQpvcHRpb25zKHNjaXBlbiA9IDUpCnNldC5zZWVkKDEzMzcpCgojIyMgTG9hZCBwYWNrYWdlcyAgCiMgZ2VuZXJhbApsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShtYWdyaXR0cikKbGlicmFyeSh3aWR5cikKCiMgS2libGlvICYgTlcKbGlicmFyeShiaWJsaW9tZXRyaXgpCmxpYnJhcnkodGlkeWdyYXBoKQpsaWJyYXJ5KGdncmFwaCkKCiMgTkxQCmxpYnJhcnkodGlkeXRleHQpCgojIERhdGF2aXoKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoZ2dmb3JjZSkKbGlicmFyeShnZ3JlcGVsKQpsaWJyYXJ5KHBhdGNod29yaykKCiMgS25pdApsaWJyYXJ5KGtuaXRyKSAjIEZvciBkaXNwbGF5IG9mIHRoZSBtYXJrZG93bgpsaWJyYXJ5KGthYmxlRXh0cmEpICMgRm9yIHRhYmxlIHN0eWxpbmcKCiMgb3duIGZ1bmN0aW9ucwpzb3VyY2UoIi4uL2Z1bmN0aW9ucy9mdW5jdGlvbnNfYmFzaWMuUiIpCnNvdXJjZSgiLi4vZnVuY3Rpb25zL2Z1bmN0aW9uc19zdW1tYXJ5LlIiKQpzb3VyY2UoIi4uL2Z1bmN0aW9ucy8wMF9wYXJhbWV0ZXJzLlIiKQoKIyBLbml0ciBvcHRpb25zCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSkKYGBgCgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkVYVCBQQVJUICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KIyBXaGVuIGRvaW5nIGl0IGhlcmUgaW4gdGhlIG5vdGVib29rCnZhcl9pbnN0IDwtICdFSVNUJwp2YXJfZGVwdCA8LSAndjInCgojIFdoZW4gY2FsbGluZyBmcm9tIGEgaGlnaGVydCBsZXZlbCBzY3JpcHQKI3Zhcl9pbnN0IDwtIHBhcmFtcyRpbnN0aXR1dGUKI3Zhcl9kZXB0IDwtIHBhcmFtcyRkZXBhcnRtZW50CmBgYAoKIyBJbnRyb2R1Y3Rpb246IE1hcHBpbmcgb2YgYnJvYWQgcmVzZWFyY2ggZmllbGQgYXJvdW5kIGByIHZhcl9pbnN0YCBpbiBgciB2YXJfZGVwdGAKCkhlcmUgYXJlIHByZWxpbWluYXJ5IHJlc3VsdHMgb2YgdGhlIGJpYmxpb21ldHJpYyBtYXBwaW5nIG9mIEVJU1QuIEl0cyBwdXJwb3NlIGlzOgoKKiBUbyBtYXAgdGhlIGJyb2FkZXIgcmVzZWFyY2ggY29tbXVuaXR5IGFuZCBkaXN0aW5jdCByZXNlYXJjaCBmaWVsZCB0aGUgZGVwYXJ0bWVudCBjb250cmlidXRlcyB0by4KKiBJZGVudGlmeSBjb3JlIGtub3dsZWRnZSBiYXNlcywgcmVzZWFyY2ggYXJlYXMgZ3RyZW5kcyBhbmQgdG9waWNzLgoqIEhpZ2hsaWdodCB0aGUgcG9zaXRpb25pbmcgb2YgdGhlIGRlcGFydG1lbnQgd2l0aGluIHRoaXMgZHluYW1pY3MuCgpUaGUgbWV0aG9kIGZvciB0aGUgcmVzZWFyY2gtZmllbGQtbWFwcGluZyBjYW4gYmUgcmV2aWV3ZWQgaGVyZToKCltSYWthcywgTS4sICYgSGFpbiwgRC4gUy4gKDIwMTkpLiBUaGUgc3RhdGUgb2YgaW5ub3ZhdGlvbiBzeXN0ZW0gcmVzZWFyY2g6IFdoYXQgaGFwcGVucyBiZW5lYXRoIHRoZSBzdXJmYWNlPy4gUmVzZWFyY2ggUG9saWN5LCA0OCg5KSwgMTAzNzg3Ll0oaHR0cHM6Ly9kb2kub3JnLzEwLjEwMTYvai5yZXNwb2wuMjAxOS4wNC4wMTEpCgoqKk5vdGU6KiogVGhlIGFuYWx5c2lzIGluIHRoaXMgZG9jdW1lbnQgZGVwaWN0cyB0aGUgKmxhcmdlciByZXNlYXJjaCBmaWVsZCogYXJvdW5kIHRoZSBkZXBhcnRtZW50LCB0aGVyZWJ5IGFsbCBhbmFseXNpcyByZXN1bHRzIGFyZSBiYXNlZCBvbiB0aGUgcHVibGljYXRpb25zIG9mIHRoZSBkZXBhcnRtZW50IHBsdXMgcmVsYXRlZCAKCgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkVYVCBQQVJUICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KIyBMb2FkIGRhdGEKTSA8LSByZWFkUkRTKHBhc3RlMCgnLi4vLi4vdGVtcC9NXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkgJT4lIGFzX3RpYmJsZSgpICU+JSAKICBkaXN0aW5jdChVVCwgLmtlZXBfYWxsID0gVFJVRSkgJT4lIAogIGZpbHRlcihQWSA+PSBQWV9taW4sIFBZIDw9IFBZX21heCkgJT4lCiAgZ3JvdXBfYnkoUFkpICU+JQogICAgbXV0YXRlKFRDX2NvaG9ydF9yYW5rID0gcGVyY2VudF9yYW5rKFRDKSkgJT4lCiAgdW5ncm91cCgpIApgYGAKCmBgYHtyfQpjb21fbGFiZWxzIDwtIHJlYWRfY3N2MignLi4vZGF0YS9jb21tdW5pdHlfbGFiZWxpbmcuY3N2JykgICU+JSBmaWx0ZXIoaW5zdGl0dXRlID09IHZhcl9pbnN0LCBkZXBhcnRtZW50ID09IHZhcl9kZXB0KSAlPiUgYXJyYW5nZShpbnN0aXR1dGUsIGRlcGFydG1lbnQsIHR5cGUsIGNvbSkgJT4lIG11dGF0ZShsYWJlbCA9IGlmZWxzZShpcy5uYShsYWJlbCksIHBhc3RlMCh0eXBlLCAnICcsIGNvbSwgJzogdW5sYWJlbGVkJyksIHBhc3RlMCh0eXBlLCAnICcsIGNvbSwgJzogJywgbGFiZWwpKSkKYGBgCgoKIyBHZW5lcmFsIE92ZXJ2aWV3IG92ZXIgdGhlIHJlc2VhcmNoIGZpZWxkCgoqKk5vdGU6KiogVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGJhc2ljIGRlc2NyaXB0aXZlcyBvZiB0aCBpZGVudGlmaWVkIHJlc2VhcmNoIGZpZWxsZCwgaW5jbHVkaW5nIG51bWJlciBvZiBhcnRpY2xlcyBvdmVyIHRpbWUsIGNvdW50cmllcywgaW5zdGl0dXRpb25zLCBhbmQgYXV0aG9ycy4gU2VlIGBUZWNobmljYWwgZGVzY3JpcHRpb25gZm9yIGFkZGl0aW9uYWwgZXhwbGFuYXRpb25zLgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CiMgcmVzdWx0cyA8LSBiaWJsaW9BbmFseXNpcyhNLCBzZXAgPSAiOyIpCnJlc3VsdHMgPC0gcmVhZF9yZHMocGFzdGUwKCcuLi8uLi90ZW1wL01fcmVzXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgojIyBNYWluIEluZGljYXRvcnM6IFB1YmxpY2F0aW9ucywgQXV0aG9ycywgQ291bnRyaWVzIAoKYGBge3J9CiNyZXN1bHRzICU+JSBwbG90KGsgPSAxMCwgcGF1c2UgPSBGQUxTRSkKYGBgCgpgYGB7cn0KcHJvZF9BVSA8LSBNICU+JSBhdXRob3JQcm9kT3ZlclRpbWUoayA9IDEwLCBncmFwaCA9IFRSVUUpCiNwbG90KHByb2RfQVUkZ3JhcGgpCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CnJtKHJlc3VsdHMsIHByb2RfQVUpCmBgYAoKIyMgQ29ubmVjdGlvbiBiZXR3ZWVuIHRoZSByZXNlYXJjaCBmaWVsZCdzIFRvcCBBdXRob3JzLUtleXdvcmRzLUpvdXJuYWxzCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KTV90aHJlZWZpZWxkIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL3RocmVlZmllbGRfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTE3LjUsIGZpZy5oZWlnaHQ9MTcuNX0KTV90aHJlZWZpZWxkCmBgYAoKIyBUb3BpYyBtb2RlbGxpbmcgCgoqKk5vdGU6KiogSGVyZSwgd2UgcmVwb3J0IHRoZSByZXN1bHRzIG9mIGEgTERBIHRvcGljLW1vZGVsbGluZyAoYmFzaWNhbGx5LCBjbHVzdGVyaW5nIG9uIHdvcmRzKSBvbiBhbGwgdGl0bGUrYWJzdHJhY3QgdGV4dHMuIElkZW50aWZpZWQgdG9waWNzIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBicm9hZCB0aGVtZXMgaW4gdGhlIHJlc2VhcmNoIGZpZWxkLiBTZWUgYFRlY2huaWNhbCBkZXNjcmlwdGlvbmBmb3IgYWRkaXRpb25hbCBleHBsYW5hdGlvbnMuCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KdGV4dF90aWR5IDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL3RleHRfdGlkeV8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCnRleHRfbGRhIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL3RleHRfTERBXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkgCgp0ZXh0X2xkYV9iZXRhIDwtIHRleHRfbGRhICU+JSB0aWR5KG1hdHJpeCA9ICJiZXRhIikgCnRleHRfbGRhX2dhbW1hIDwtIHRleHRfbGRhICU+JSB0aWR5KG1hdHJpeCA9ICJnYW1tYSIpCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmNvbV9uYW1lc190b3AgPC0gdGliYmxlKCAKICBjb20gPSAxOih0ZXh0X2xkYV9nYW1tYSAlPiUgcHVsbCh0b3BpYykgJT4lIG5fZGlzdGluY3QoKSksCiAgdHlwZSA9ICdUUCcsCiAgY29sID0gY29tICU+JSBnZ19jb2xvcl9zZWxlY3QocGFsID0gcGFsX3RwKSkgJT4lCiAgbGVmdF9qb2luKGNvbV9sYWJlbHMgJT4lIGZpbHRlcih0eXBlID09ICdUUCcpICU+JSBzZWxlY3QoY29tLCBsYWJlbCksIGJ5ID0gJ2NvbScpICU+JQogIG11dGF0ZShsYWJlbCA9IGlmZWxzZShpcy5uYShsYWJlbCksIHBhc3RlMCgnVFAgJywgY29tLCAnOiB1bmxhYmVsZWQnKSwgbGFiZWwpKQogICAgICAgICAgICAKIyAjIDFzdCBhbHRlcm5hdGl2ZTogTnVtYmVyIHRoZW0gMS1uCiMgcGFzdGUodHlwZSwgMToodGV4dF9sZGFfZ2FtbWEgJT4lIHB1bGwodG9waWMpICU+JSBuX2Rpc3RpbmN0KCkpKSAgICAgICAgICAgCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CnRleHRfbGRhX2JldGEgJTw+JSAgaW5uZXJfam9pbihjb21fbmFtZXNfdG9wICU+JSBzZWxlY3QoY29tLCBsYWJlbCwgY29sKSwgYnkgPSBjKCd0b3BpYycgPSAnY29tJykpCnRleHRfbGRhX2dhbW1hICU8PiUgaW5uZXJfam9pbihjb21fbmFtZXNfdG9wICU+JSBzZWxlY3QoY29tLCBsYWJlbCwgY29sKSwgYnkgPSBjKCd0b3BpYycgPSAnY29tJykpCmBgYAoKCiMjIFRvcGljcyBieSB0b3B3b3JkcwoKYGBge3IsIGZpZy53aWR0aD0xNSwgZmlnLmhlaWdodD0xNX0gCnRleHRfbGRhX2JldGEgJT4lCiAgZ3JvdXBfYnkobGFiZWwpICU+JQogIHNsaWNlX21heChiZXRhLCBuID0gMTApICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUodGVybSA9IHJlb3JkZXJfd2l0aGluKHRlcm0sIGJldGEsIGxhYmVsKSkgJT4lCiAgZ2dwbG90KGFlcyh0ZXJtLCBiZXRhLCBmaWxsID0gZmFjdG9yKGxhYmVsKSkpICsKICBnZW9tX2NvbChzaG93LmxlZ2VuZCA9IEZBTFNFKSArCiAgZmFjZXRfd3JhcCh+IGxhYmVsLCBzY2FsZXMgPSAiZnJlZSIsIG5jb2wgPSAzKSArCiAgY29vcmRfZmxpcCgpICsKICBzY2FsZV94X3Jlb3JkZXJlZCgpICsKICBsYWJzKHggPSAiSW50cmEtdG9waWMgZGlzdHJpYnV0aW9uIG9mIHdvcmQiLAogICAgICAgeSA9ICJXb3JkcyBpbiB0b3BpYyIpICsgCiAgc2NhbGVfZmlsbF9tYW51YWwobmFtZSA9ICJMZWdlbmQiLCB2YWx1ZXMgPSBjb21fbmFtZXNfdG9wICU+JSBwdWxsKGNvbCkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKCiNwbG90X2x5IDwtIHBsb3QgJT4lIHBsb3RseTo6Z2dwbG90bHkoKQojaHRtbHdpZGdldHM6OnNhdmVXaWRnZXQocGxvdGx5Ojphc193aWRnZXQocGxvdF9seSksICcuLi9vdXRwdXRcdmlzX3Bsb3RseV90b3BpY190ZXJtcy5odG1sJywgc2VsZmNvbnRhaW5lZCA9IFRSVUUpCmBgYAoKKipOb3RlOioqIFdoaWxlIHRoaXMgc3RhdGljIHZpZXMgaXMgaGVscGZ1bCwgSSByZWNvbW1lbmQgdXNpbmcgdGhlIGludGVyYWN0aXZlIExEQVZpcyB2ZXJzaW9uIHRvIGJlIGZvdW5kIHVuZGVyIGByIHBhc3RlMCgnaHR0cHM6Ly9kYW5pZWwtaGFpbi5naXRodWIuaW8vYmlibGlvX2x1eF8yMDIyL291dHB1dC90b3BpY19tb2RlbGxpbmcvTERBdml6XycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy9pbmRleC5odG1sI3RvcGljPTEmbGFtYmRhPTAuNjAmdGVybT0nKWAuIEZvciBmdW5jdGlvbmFsaXR5IGFuZCB1c2FnZSwgc2VlIMK0VGVjaG5pY2FsIMK0LgoKYGBge3IsIGZpZy53aWR0aCA9IDE1LCBmaWcuaGVpZ2h0PTcuNX0KdGV4dF9sZGFfZ2FtbWEgJT4lCiAgcmVuYW1lKHdlaWdodCA9IGdhbW1hKSAlPiUKICBsZWZ0X2pvaW4oTSAlPiUgc2VsZWN0KFVULCBQWSksIGJ5ID0gYygnZG9jdW1lbnQnID0gJ1VUJykpICU+JQogIG11dGF0ZShQWSA9IGFzLm51bWVyaWMoUFkpKSAlPiUKICBncm91cF9ieShQWSwgbGFiZWwpICU+JSBzdW1tYXJpc2Uod2VpZ2h0ID0gc3VtKHdlaWdodCkpICU+JSB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkoUFkpICU+JSBtdXRhdGUod2VpZ2h0X1BZID0gc3VtKHdlaWdodCkpICU+JSB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKHdlaWdodF9yZWwgPSB3ZWlnaHQgLyB3ZWlnaHRfUFkpICU+JQogIHNlbGVjdChQWSwgbGFiZWwsIHdlaWdodCwgd2VpZ2h0X3JlbCkgJT4lCiAgZmlsdGVyKFBZID49IFBZX21pbiAmIFBZIDw9IFBZX21heCkgJT4lCiAgYXJyYW5nZShQWSwgbGFiZWwpICU+JQogIHBsb3Rfc3VtbWFyeV90aW1lbGluZSh5MSA9IHdlaWdodCwgeTIgPSB3ZWlnaHRfcmVsLCB0ID0gUFksIHRfbWluID0gUFlfbWluLCB0X21heCA9IFBZX21heCwgYnkgPSBsYWJlbCwgIGxhYmVsID0gVFJVRSwgcGFsID0gcGFsX3RwLCAKICAgICAgICAgICAgICAgICAgICAgICAgeTFfdGV4dCA9ICJUb3BpYyBwb3B1bGFyaXR5IGFubnVhbHkiLCB5Ml90ZXh0ID0gIlNoYXJlIG9mIHRvcGljIGFubnVhbGx5IikgKwogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9IHBhc3RlKCdUb3BpYyBNb2RlbGxpbmc6JywgdmFyX2luc3QsICdGaWVsZCBhcm91bmQgRGVwdC4nLCB2YXJfZGVwdCwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBwYXN0ZSgnVGltZWZyYW1lOicsIFBZX21pbiwgJy0nLCBQWV9tYXggLCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBjYXB0aW9uID0gJ0Fic29sdXRlIHRvcGljIGFwcGVhcmFuY2UgKGxlZnQpLCBSZWxhdGl2ZSB0b3BpYyBhcHBlYXJhbmNlIChyaWdodCknKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAxNSwgZmlnLmhlaWdodD03LjV9CnRleHRfbGRhX2dhbW1hICU+JQogIHJlbmFtZSh3ZWlnaHQgPSBnYW1tYSkgJT4lCiAgaW5uZXJfam9pbihNICU+JSBzZWxlY3QoVVQsIFBZLCBUQ19jb2hvcnRfcmFuaykgJT4lCiAgICAgICAgICAgICAgZmlsdGVyKGludF9kZXB0ID0gVFJVRSksIGJ5ID0gYygnZG9jdW1lbnQnID0gJ1VUJykpICU+JQogICMgbXV0YXRlKGltcGFjdCA9IHdlaWdodCogVENfY29ob3J0X3JhbmspICU+JQogIG11dGF0ZShpbXBhY3QgPSBUQ19jb2hvcnRfcmFuayA+PSAwLjkpICU+JQogIGdyb3VwX2J5KFBZKSAlPiUKICBmaWx0ZXIocGVyY2VudF9yYW5rKHdlaWdodCkgPj0gMC41KSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkobGFiZWwsIFBZKSAlPiUKICBzdW1tYXJpc2UoaW1wYWN0ID0gbWVhbihpbXBhY3QpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBQWSwgeSA9IGltcGFjdCwgY29sID0gbGFiZWwpKSArCiAgZ2VvbV9saW5lKCkgKyAKICBnZW9tX3BvaW50KCkgKyAKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKwogIGxhYnModGl0bGUgPSBwYXN0ZSgnVG9waWMgSW1wYWN0OicsIHZhcl9pbnN0LCAnRmllbGQgYXJvdW5kIERlcHQuJywgdmFyX2RlcHQsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFzdGUoJ1RpbWVmcmFtZTonLCBQWV9taW4sICctJywgUFlfbWF4ICwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgeCA9ICdZZWFyJywKICAgICAgICAgICAgICAgICAgeSA9ICdUb3BpYyBJbXBhY3QnLAogICAgICAgICAgICAgICAgICBjYXB0aW9uID0gJ1RvcGljIEltcGFjdCByZWZlcnMgdG8gdGhlIHNoYXJlIG9mIHB1YmxpY2F0aW9ucyB3aXRoaW4gdGhlIGNvaG9ydCB0b3AtMTAlIGNpdGVkIHB1YmxpY2F0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHRvcGljJywKICAgICAgICAgICAgICAgICAgKQpgYGAKCjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBORVhUIFBBUlQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0Kcm0odGV4dF90aWR5LCB0ZXh0X2xkYSkKYGBgCgojIEtub3dsZWRnZSBCYXNlczogQ28tQ2l0YXRpb24gbmV0d29yayBhbmFseXNpcyAKCioqTm90ZToqKiBUaGlzIGFuYWx5c2lzIHJlZmVycyB0aGUgY28tY2l0YXRpb24gYW5hbHlzaXMsIHdoZXJlIHRoZSBjaXRlZCByZWZlcmVuY2VzIGFuZCBub3QgdGhlIG9yaWdpbmFsIHB1YmxpY2F0aW9ucyBhcmUgdGhlIHVuaXQgb2YgYW5hbHlzaXMuIElkZW50aWZpZWQga25vd2xlZGdlIGJhc2VzIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUga25vd2xlZGdlIGZvdW5kYXRpb24gdGhlIGZpZWxkIGRyYXdzIGZyb20uIFNlZSBgVGVjaG5pY2FsIGRlc2NyaXB0aW9uYGZvciBhZGRpdGlvbmFsIGV4cGxhbmF0aW9ucy4KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpDX253IDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL0NfbndfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAgJT4lCiAgZHJvcF9uYShjb20pCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmNvbV9uYW1lc19jaXQgPC0gdGliYmxlKCAKICBjb20gPSAxOihDX253ICU+JSBwdWxsKGNvbSkgJT4lIG5fZGlzdGluY3QoKSksCiAgdHlwZSA9ICdLQicsCiAgY29sID0gY29tICU+JSBnZ19jb2xvcl9zZWxlY3QocGFsID0gcGFsX2tiKSkgJT4lCiAgbGVmdF9qb2luKGNvbV9sYWJlbHMgJT4lIGZpbHRlcih0eXBlID09ICdLQicpICU+JSBzZWxlY3QoY29tLCBsYWJlbCksIGJ5ID0gJ2NvbScpICU+JQogIG11dGF0ZShsYWJlbCA9IGlmZWxzZShpcy5uYShsYWJlbCksIHBhc3RlMCgnS0IgJywgY29tLCAnOiB1bmxhYmVsZWQnKSwgbGFiZWwpKQoKIyAjIDFzdCBhbHRlcm5hdGl2ZTogTnVtYmVyIHRoZW0gMS1uCiMgcGFzdGUodHlwZSwgMTooQ19udyAlPiUgcHVsbChjb20pICU+JSBuX2Rpc3RpbmN0KCkpKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpDX253ICU8PiUgbGVmdF9qb2luKGNvbV9uYW1lc19jaXQgJT4lIHNlbGVjdChjb20sIGxhYmVsLCBjb2wpLCBieSA9ICJjb20iKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQprYl9zdGF0cyA8LSBDX253ICU+JQogIGdyb3VwX2J5KGxhYmVsKSAlPiUKICBzdW1tYXJpc2UobiA9IG4oKSwgZGVuc2l0eV9pbnQgPSAoKHN1bShkZ3JfaW50KSAvIChuKCkgKiAobigpIC0gMSkpKSAqIDEwMCkgJT4lIHJvdW5kKDMpKSAlPiUKICByZWxvY2F0ZShsYWJlbCwgZXZlcnl0aGluZygpKQpgYGAKCmBgYHtyfQprYl9zdW0gPC1DX253ICU+JSBncm91cF9ieShjb20pICU+JSAKICBhcnJhbmdlKGNvbSwgZGVzYyhkZ3JfaW50KSkgJT4lCiAgbXV0YXRlKG5hbWUgPSBuYW1lICU+JSBzdHJfdHJ1bmMoMTUwKSkgJT4lCiAgc2xpY2VfbWF4KG9yZGVyX2J5ID0gZGdyX2ludCwgbiA9IDEwLCB3aXRoX3RpZXMgPSBGQUxTRSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QoIG5hbWUsIGRncl9pbnQsIGRncikgJT4lCiAga2FibGUoKSAKCmZvcihpIGluIDE6bnJvdyhjb21fbmFtZXNfY2l0KSl7CiAga2Jfc3VtIDwtIGtiX3N1bSAlPiUKICAgIHBhY2tfcm93cyhwYXN0ZTAoJ0tub3dsZWRnZSBCYXNlICcsIGksICc6ICcsIGNvbV9uYW1lc19jaXRbaSwgJ2xhYmVsJ10sCiAgICAgICAgICAgICAgICAgICAgICcgICAobiA9ICcsIGtiX3N0YXRzW2ksICduJ10sICcsIGRlbnNpdHkgPScsIGtiX3N0YXRzW2ksICdkZW5zaXR5X2ludCddICU+JSByb3VuZCgyKSwgJyknICksIAogICAgICAgICAgICAgIChpKjEwLTkpLCAgKGkqMTApLCBsYWJlbF9yb3dfY3NzID0gImJhY2tncm91bmQtY29sb3I6ICM2NjY7IGNvbG9yOiAjZmZmOyIpIAogIH0KCmtiX3N1bSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCBmb250X3NpemUgPSAxMCkKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KZWxfMm0gPC0gcmVhZFJEUyhwYXN0ZTAoJy4uLy4uL3RlbXAvZWxfMm1fJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAlPiUKICBkcm9wX25hKCkKYGBgCgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmNpdF9jb21feWVhciA8LSBlbF8ybSAlPiUKICBjb3VudChjb21fY2l0LCBQWSwgbmFtZSA9ICdUQycpICU+JQogIGdyb3VwX2J5KFBZKSAlPiUKICBtdXRhdGUoVENfcmVsID0gVEMgLyBzdW0oVEMpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgYXJyYW5nZShQWSwgY29tX2NpdCkgJT4lCiAgbGVmdF9qb2luKGNvbV9uYW1lc19jaXQgLCBieSA9IGMoJ2NvbV9jaXQnID0gJ2NvbScpKSAlPiUgCiAgY29tcGxldGUobGFiZWwsIFBZLCBmaWxsID0gbGlzdChUQyA9IDAsIFRDX3JlbCA9IDApKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAxNSwgZmlnLmhlaWdodD03LjV9CmNpdF9jb21feWVhciAlPiUKICBwbG90X3N1bW1hcnlfdGltZWxpbmUoeTEgPSBUQywgeTIgPSBUQ19yZWwsIHQgPSBQWSwgdF9taW4gPSBQWV9taW4sIHRfbWF4ID0gUFlfbWF4LCBieSA9IGxhYmVsLCBwYWwgPSBwYWxfa2IsIGxhYmVsID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgeTFfdGV4dCA9ICJOdW1iZXIgY2l0YXRpb25zIHJlY2lldmVkIGFubnVhbGx5IiwgIHkyX3RleHQgPSAiU2hhcmUgb2YgY2l0YXRpb25zIHJlY2lldmVkIGFubnVhbGx5IikgKwogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9IHBhc3RlKCdLbm93bGVkZ2UgQnNlczonLCB2YXJfaW5zdCwgJ0ZpZWxkIGFyb3VuZCBEZXB0LicsIHZhcl9kZXB0LCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlKCdUaW1lZnJhbWU6JywgUFlfbWluLCAnLScsIFBZX21heCAsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAnQWJzb2x1dGUga25vd2xlZGdlIGJhc2UgYXBwZWFyYW5jZSAobGVmdCksIFJlbGF0aXZlIGtub3dsZWRnZSBiYXNlIGFwcGVhcmFuY2UgKHJpZ2h0KScpCmBgYAoKPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE5FWFQgUEFSVCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgoKIyBSZXNlYXJjaCBBcmVhczogQmlibGlvZ3JhcGhpYyBjb3VwbGluZyBhbmFseXNpcwoKKipOb3RlOioqIFRoaXMgYW5hbHlzaXMgcmVmZXJzIHRoZSBiaWJsaW9ncmFwaGljIGNvdXBsaW5nIGFuYWx5c2lzLCB3aGVyZSBvcmlnaW5hbCBwdWJsaWNhdGlvbnMgYXJlIHRoZSB1bml0IG9mIGFuYWx5c2lzLiBJZGVudGlmaWVkIHJlc2VhcmNoIGFyZWFzIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUgZmllbGQncyBjdXJyZW50IHJlc2VhcmNoIGZyb250aWVyLiBTZWUgYFRlY2huaWNhbCBkZXNjcmlwdGlvbmBmb3IgYWRkaXRpb25hbCBleHBsYW5hdGlvbnMuCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KTV9iaWIgPC0gcmVhZFJEUyhwYXN0ZTAoJy4uLy4uL3RlbXAvTV9iaWJfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAlPiUgCiAgYXNfdGliYmxlKCkgJT4lCiAgZHJvcF9uYShjb20pCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmNvbV9uYW1lc19iaWIgPC0gdGliYmxlKCAKICBjb20gPSAxOihNX2JpYiAlPiUgcHVsbChjb20pICU+JSBuX2Rpc3RpbmN0KCkpLAogIHR5cGUgPSAnUkEnLAogIGNvbCA9IGNvbSAlPiUgZ2dfY29sb3Jfc2VsZWN0KHBhbCA9IHBhbF9yYSkpICU+JQogIGxlZnRfam9pbihjb21fbGFiZWxzICU+JSBmaWx0ZXIodHlwZSA9PSAnUkEnKSAlPiUgc2VsZWN0KGNvbSwgbGFiZWwpLCBieSA9ICdjb20nKSAlPiUKICBtdXRhdGUobGFiZWwgPSBpZmVsc2UoaXMubmEobGFiZWwpLCBwYXN0ZTAoJ1JBICcsIGNvbSwgJzogdW5sYWJlbGVkJyksIGxhYmVsKSkKCiMgIyAxc3QgYWx0ZXJuYXRpdmU6IE51bWJlciB0aGVtIDEtbgojIHBhc3RlKHR5cGUsIDE6KE1fYmliICU+JSBwdWxsKGNvbSkgJT4lIG5fZGlzdGluY3QoKSkpCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9Ck1fYmliICU8PiUgbGVmdF9qb2luKGNvbV9uYW1lc19iaWIgJT4lIHNlbGVjdChjb20sIGxhYmVsLCBjb2wpLCBieSA9ICJjb20iKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpyYV9zdGF0cyA8LSBNX2JpYiAlPiUKICBkcm9wX25hKGNvbSkgJT4lCiAgZ3JvdXBfYnkoY29tLCBsYWJlbCkgJT4lCiAgc3VtbWFyaXNlKG4gPSBuKCksIGRlbnNpdHlfaW50ID0gKChzdW0oZGdyX2ludCkgLyAobigpICogKG4oKSAtIDEpKSkgKiAxMDApICU+JSByb3VuZCgzKSkgJT4lCiAgc2VsZWN0KGNvbSwgbGFiZWwsIGV2ZXJ5dGhpbmcoKSkKYGBgCgpgYGB7cn0KcmFfc3VtIDwtIE1fYmliICU+JSBncm91cF9ieShsYWJlbCkgJT4lIAogIGxlZnRfam9pbihNICU+JSBzZWxlY3QoVVQsIEFVLCBQWSwgVEksIFRDKSwgYnkgPSAnVVQnKSAlPiUKICBtdXRhdGUoZGdyX3NlbGVjdCA9IChkZ3JfaW50IC8gbWF4KGRncl9pbnQpICogKFRDIC8gbWF4KFRDKSkpICkgJT4lCiAgc2xpY2VfbWF4KG9yZGVyX2J5ID0gZGdyX3NlbGVjdCwgbiA9IDEwLCB3aXRoX3RpZXMgPSBGQUxTRSkgJT4lIAogIG11dGF0ZShUQ195ZWFyID0gKFRDIC8gKDIwMjEgKyAxIC0gUFkpKSAlPiUgcm91bmQoMiksCiAgICAgICAgIGRncl9pbnQgPSBkZ3JfaW50ICU+JSByb3VuZCgyKSwKICAgICAgICAgQVUgPSBBVSAlPiUgc3RyX3RydW5jKDI1KSwKICAgICAgICAgVEkgPSBUSSAlPiUgc3RyX3RydW5jKDEyNSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QoQVUsIFBZLCBUSSwgZGdyX2ludCwgVEMsIFRDX3llYXIpICU+JQogIGthYmxlKCkKCgpmb3IoaSBpbiAxOm5yb3coY29tX25hbWVzX2JpYikpewogIHJhX3N1bSAgJTw+JQogICAgcGFja19yb3dzKHBhc3RlMCgnUmVzZWFyY2ggQXJlYSAnLCBpLCAnOiAnLCBjb21fbmFtZXNfYmliW2ksICdsYWJlbCddLAogICAgICAgICAgICAgICAgICAgICAnICAgKG4gPSAnLCByYV9zdGF0c1tpLCAnbiddLCAnLCBkZW5zaXR5ID0nLCByYV9zdGF0c1tpLCAnZGVuc2l0eV9pbnQnXSAlPiUgcm91bmQoMiksICcpJyApLCAKICAgICAgICAgICAgICAoaSoxMC05KSwgIChpKjEwKSwgbGFiZWxfcm93X2NzcyA9ICJiYWNrZ3JvdW5kLWNvbG9yOiAjNjY2OyBjb2xvcjogI2ZmZjsiKSAKICB9CgpyYV9zdW0gJT4lIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIGZvbnRfc2l6ZSA9IDEwKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAxNSwgZmlnLmhlaWdodD03LjV9Ck1fYmliICU+JQogIGxlZnRfam9pbihNICU+JSBzZWxlY3QoWFgsIFBZKSwgYnkgPSAnWFgnKSAlPiUKICBtdXRhdGUoUFkgPSBQWSAlPiUgYXMubnVtZXJpYygpKSAlPiUKICBncm91cF9ieShsYWJlbCwgUFkpICU+JSBzdW1tYXJpc2UobiA9IG4oKSkgJT4lIHVuZ3JvdXAoKSAlPiUKICBncm91cF9ieShQWSkgJT4lIG11dGF0ZShuX1BZID0gc3VtKG4pKSAlPiUgdW5ncm91cCgpICU+JQogIG11dGF0ZShuX3JlbCA9IG4gLyBuX1BZKSAlPiUKICBzZWxlY3QobGFiZWwsIFBZLCBuLCBuX3JlbCkgJT4lCiAgYXJyYW5nZShsYWJlbCwgUFkpICU+JSAKICBjb21wbGV0ZShsYWJlbCwgUFksIGZpbGwgPSBsaXN0KG4gPSAwLCBuX3JlbCA9IDApKSAlPiUKICBwbG90X3N1bW1hcnlfdGltZWxpbmUoeTEgPSBuLCB5MiA9IG5fcmVsLCB0ID0gUFksIHRfbWluID0gUFlfbWluLCB0X21heCA9IFBZX21heCwgYnkgPSBsYWJlbCwgbGFiZWwgPSBUUlVFLCBwYWwgPSBwYWxfcmEsCiAgICAgICAgICAgICAgICAgICAgICAgIHkxX3RleHQgPSAiTnVtYmVyIHB1YmxpY2F0aW9ucyBhbm51YWxseSIsIHkyX3RleHQgPSAiU2hhcmUgb2YgcHVibGljYXRpb25zIGFubnVhbGx5IikgKwogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9IHBhc3RlKCdSZXNlYXJjaCBBcmVhczonLCB2YXJfaW5zdCwgJ0ZpZWxkIGFyb3VuZCBEZXB0LicsIHZhcl9kZXB0LCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlKCdUaW1lZnJhbWU6JywgUFlfbWluLCAnLScsIFBZX21heCAsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAnQWJzb2x1dGUgcmVzZWFyY2ggYXJlYSBhcHBlYXJhbmNlIChsZWZ0KSwgUmVsYXRpdmUgcmVzZWFyY2ggYXJlYSBhcHBlYXJhbmNlIChyaWdodCknKQpgYGAKCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KZ19hZ2cgPC0gcmVhZFJEUyhwYXN0ZTAoJy4uLy4uL3RlbXAvZ19iaWJfYWdnXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkgJU4+JQogIGFycmFuZ2UoY29tKSAjICU+JQojICAgbXV0YXRlKG5hbWUgPSBuYW1lc19yYSAlPiUgcHVsbChjb21fcmFfbmFtZSksCiMgICAgICAgICAgY29sb3IgPSBjb2xzX3JhKQpgYGAKCmBgYHtyLCBmaWcuaGVpZ2h0PSA3LjUsIGZpZy53aWR0aD03LjV9CmdfYWdnICVFPiUgCiAgZmlsdGVyKHdlaWdodCA+IDAgJiBmcm9tICE9IHRvKSAlPiUKICBmaWx0ZXIod2VpZ2h0ID49IHF1YW50aWxlKHdlaWdodCwgMC4yNSkgKSAgJU4+JQogIG11dGF0ZShjb20gPSBjb21fbmFtZXNfYmliICU+JSBwdWxsKGxhYmVsKSkgJT4lCiAgZ2dyYXBoKGxheW91dCA9ICJjaXJjbGUiKSArIAogIGdlb21fZWRnZV9mYW4oc3RyZW5naHQgPSAwLjgsIGFlcyh3aWR0aCA9IHdlaWdodCksIGFscGhhID0gMC4yKSAgKyAKICBnZW9tX25vZGVfcG9pbnQoYWVzKHNpemUgPSBOLCBjb2xvciA9IGNvbSkpICArIAogIGdlb21fbm9kZV90ZXh0KGFlcyhsYWJlbCA9IGNvbSksIHJlcGVsID0gVFJVRSkgKwogICN0aGVtZV9ncmFwaChiYXNlX2ZhbWlseSA9ICJBcmlhbCIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKwogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsMjApKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSBwYWxfcmEpICsKICBsYWJzKHRpdGxlID0gcGFzdGUoJ1Jlc2VhcmNoIEFyZWEgQ29ubmVjdGl2aXR5OicsIHZhcl9pbnN0LCAnRmllbGQgYXJvdW5kIERlcHQuJywgdmFyX2RlcHQsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFzdGUoJ1RpbWVmcmFtZTonLCBQWV9taW4sICctJywgUFlfbWF4ICwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICdOb2RlcyA9IElkZW50aWZpZWQgUmVzZWFyY2ggQXJlYXM7IEVkZ2VzOiBCaWJsaW9ncmFwaGljIGNvdXBsaW5nIHN0cmVuZ2h0IChKYWNjYXJkIHdlaWdodGVkKScpCmBgYAoKCiMgS25vd2xlZGdlIEJhc2VzLCBSZXNlYXJjaCBBcmVhcyAmIFRvcGljcyBJbnRlcmFjdGlvbgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CiMgTm9kZXMKbmxfM20gPC0gY29tX25hbWVzX2JpYiAlPiUKICBiaW5kX3Jvd3MoY29tX25hbWVzX2NpdCkgJT4lCiAgYmluZF9yb3dzKGNvbV9uYW1lc190b3ApICU+JQogIHJlbmFtZShuYW1lID0gbGFiZWwsCiAgICAgICAgIGNvbV9uciA9IGNvbSkgJT4lCiAgcmVsb2NhdGUobmFtZSkKCiMgRWRnZXMKZWxfMm1fa2IgPC0gZWxfMm0gJT4lCiAgc2VsZWN0KC1mcm9tLCAtdG8pICU+JQogIGlubmVyX2pvaW4oY29tX25hbWVzX2NpdCAlPiUgc2VsZWN0KGNvbSwgbGFiZWwpLCBieSA9IGMoJ2NvbV9jaXQnID0gJ2NvbScpKSAlPiUKICBpbm5lcl9qb2luKGNvbV9uYW1lc19iaWIgJT4lIHNlbGVjdChjb20sIGxhYmVsLCBjb2wpLCBieSA9IGMoJ2NvbV9iaWInID0gJ2NvbScpKSAlPiUKICBtdXRhdGUod2VpZ2h0ID0gMSkgJT4lCiAgcmVuYW1lKGZyb20gPSBsYWJlbC54LAogICAgICAgICB0byA9IGxhYmVsLnkpICU+JSAjIGdlbmVyaWMKICBzZWxlY3QoZnJvbSwgdG8sIHdlaWdodCwgY29sKSAlPiUgCiAgZHJvcF9uYSgpICU+JSAKICBjb3VudChmcm9tLCB0bywgY29sLCB3dCA9IHdlaWdodCwgbmFtZSA9ICd3ZWlnaHQnKSAlPiUKICBmaWx0ZXIocGVyY2VudF9yYW5rKHdlaWdodCkgPj0gMC4yNSkgJT4lCiAgd2VpZ2h0X2phY2NhcmQoaSA9IGZyb20sIGogPSB0bywgdyA9IHdlaWdodCkgJT4lIAogIHNlbGVjdCgtd2VpZ2h0KQoKZWxfMm1fdG9waWMgPC0gdGV4dF9sZGFfZ2FtbWEgJT4lIHNlbGVjdCgtdG9waWMsIC1jb2wpICU+JQogIGxlZnRfam9pbihNX2JpYiAlPiUgc2VsZWN0KFhYLCBjb20pICU+JSBkcm9wX25hKGNvbSksIGJ5ID0gYygnZG9jdW1lbnQnID0gJ1hYJykpICU+JQogIGlubmVyX2pvaW4oY29tX25hbWVzX2JpYiAlPiUgc2VsZWN0KGNvbSwgbGFiZWwsIGNvbCksIGJ5ID0gYygnY29tJyA9ICdjb20nKSkgJT4lCiAgcmVuYW1lKGZyb20gPSBsYWJlbC55LAogICAgICAgICB0byA9IGxhYmVsLngsCiAgICAgICAgIHdlaWdodCA9IGdhbW1hKSAlPiUgIyBnZW5lcmljCiAgc2VsZWN0KGZyb20sIHRvLCB3ZWlnaHQsIGNvbCkgJT4lIAogIGRyb3BfbmEoKSAlPiUgCiAgY291bnQoZnJvbSwgdG8sIGNvbCwgd3QgPSB3ZWlnaHQsIG5hbWUgPSAnd2VpZ2h0JykgJT4lCiAgZmlsdGVyKHBlcmNlbnRfcmFuayh3ZWlnaHQpID49IDAuMjUpICU+JQogIHdlaWdodF9qYWNjYXJkKGkgPSBmcm9tLCBqID0gdG8sIHcgPSB3ZWlnaHQpICU+JSBzZWxlY3QoLXdlaWdodCkKCiMgZ3JhcGgKZ18zbSA8LSBlbF8ybV9rYiAlPiUgCiAgYmluZF9yb3dzKGVsXzJtX3RvcGljKSAlPiUKICBhc190YmxfZ3JhcGgoZGlyZWN0ZWQgPSBUUlVFKSAlTj4lCiAgbGVmdF9qb2luKG5sXzNtLCBieSA9ICduYW1lJykgJT4lCiAgbXV0YXRlKAogICAgbGV2ZWwgPSBjYXNlX3doZW4oCiAgICAgIHR5cGUgPT0gIktCIiB+IDEsCiAgICAgIHR5cGUgPT0gIlJBIiB+IDIsCiAgICAgIHR5cGUgPT0gIlRQIiB+IDMpLAogICAgY29vcmRfeSA9IDAuMSwKICAgIGNvb3JkX3ggPSAwLjAwMSArIDEvKG1heChsZXZlbCktMSkgKiAobGV2ZWwtMSkKICAgICkgICVOPiUKICBmaWx0ZXIoIWlzLm5hKGxldmVsKSkKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KIyMgQnVpbGQgc2Fua2V5IHBsb3QKZmlnIDwtIHBsb3RfbHkodHlwZSA9ICJzYW5rZXkiLCAKICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSAiaCIsCiAgICAgICAgICAgICAgIGFycmFuZ2VtZW50ID0gInNuYXAiLAogIG5vZGUgPSBsaXN0KAogICAgbGFiZWwgPSBnXzNtICVOPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwobmFtZSksCiAgICB4ID0gZ18zbSAlTj4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKGNvb3JkX3gpLAogICAgeSA9IGdfM20gJU4+JSBhc190aWJibGUoKSAlPiUgcHVsbChjb29yZF95KSwKICAgIGNvbG9yID0gZ18zbSAlTj4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKGNvbCksIAogICAgcGFkID0gNAogICksIAogIGxpbmsgPSBsaXN0KAogICAgc291cmNlID0gKGdfM20gJUU+JSBhc190aWJibGUoKSAlPiUgcHVsbChmcm9tKSkgLTEsCiAgICB0YXJnZXQgPSAoZ18zbSAlRT4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKHRvKSkgLTEsCiAgICB2YWx1ZSA9ICBnXzNtICVFPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwod2VpZ2h0X2phYyksCiAgICBjb2xvciA9IGdfM20gJUU+JSBhc190aWJibGUoKSAlPiUgcHVsbChjb2wpICU+JSBjb2wycmdiKCkgJT4lIGFzLm1hdHJpeCgpICU+JSB0KCkgJT4lIGFzX3RpYmJsZSgpICU+JSAKICAgICAgbXV0YXRlKGNvbF9yZ2IgPSBwYXN0ZTAoJ3JnYmEoJywgcmVkLCAnLCcgLCBncmVlbiwgJywnLCBibHVlLCAnLDAuNzUpJykpICU+JSAgcHVsbChjb2xfcmdiKQogICAgKQopICU+JSAKICBsYXlvdXQodGl0bGUgPSBwYXN0ZSgnS25vd2xlZGdlIEJhc2VzLCBSZXNlYXJjaCBBcmVhcyAmIFRvcGljczonLCB2YXJfaW5zdCwgJ0ZpZWxkIGFyb3VuZCBEZXB0LicsIHZhcl9kZXB0LCBzZXAgPSAnICcpLAogICAgICAgICBtYXJnaW4gPSBsaXN0KGwgPSA1MCwgciA9IDUwLCBiID0gMTAwLCB0ID0gMTAwLCBwYWQgPSAyKSkgCmBgYAoKCiMjIEpvaW50IE92ZXJ2aWV3IG92ZXIgS25vd2xlZGdlIEJhc2VzLCBSZXNlYXJjaCBBcmVhcywgYW5kIFRvcGljcwoKVGhpcyBwbG90IHNob3dzIHRoZSBjb25uZWN0aW9uIG9mIHB1YmxpY2F0aW9ucyBpbiB0aGUgcmVzZWFyY2ggYXJlYXMgdG8ga25vd2xlZGdlIGJhc2VzIChieSBjaXRhdGlvbnMpIGFuZCB0b3BpY3MgKGJ5IGdhbW1hLCBkb2N1bWVudC10b3BpYyB3ZWlnaHQpCgpgYGB7ciwgZmlnLmhlaWdodD0gMTAsIGZpZy53aWR0aD0xNX0KZmlnCmBgYAoKCgojIFRyZW5kcyAKCmBgYHtyfQp1bmlfc2ltIDwtIHJlYWRfcmRzKHBhc3RlMCgnLi4vLi4vdGVtcC91bmlfc2ltXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgojIyBMZWFkLUxhZyBBbmFseXNpcyAKCmBgYHtyLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03LjV9CmRlc2MgPC0gdW5pX3NpbSAlPiUgCiAgZmlsdGVyKEFVX1VOID09IHBhc3RlKHZhcl9pbnN0LCB2YXJfZGVwdCkpICU+JQogIG11dGF0ZShkZXNjID0gcGFzdGUwKCdOOiAnLCBuLCAnIFxuJywKICAgICAgICAgICAgICAgICAgICAgICAnU2ltaWxhcml0eSB0byBwYXN0OicsIHNpbV9wYXN0ICU+JSByb3VuZCgyKSwgJyBcbicsCiAgICAgICAgICAgICAgICAgICAgICAgJ1NpbWlsYXJpdHkgdG8gZnV0dXJlOiAnLCBzaW1fZnV0dXJlICU+JSByb3VuZCgyKSwgJyBcbicsCiAgICAgICAgICAgICAgICAgICAgICAgJ0xlYWQtTGFnIFNjb3JlOiAnLCBmdXR1cmVfdHJlbmQgJT4lIHJvdW5kKDIpKSkgJT4lIHB1bGwoZGVzYykKICAKICAKdW5pX3NpbSAlPiUKICBzbGljZV9tYXgob3JkZXJfYnkgPSBuLCBuID0gMTAwKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzaW1fcGFzdCwgeSA9IHNpbV9mdXR1cmUpKSArCiAgZ2VvbV9tYXJrX2VsbGlwc2UoYWVzKGZpbHRlciA9IEFVX1VOID09IHBhc3RlKHZhcl9pbnN0LCB2YXJfZGVwdCksIGxhYmVsID0gQVVfVU4sIGZpbGwgPSAncmVkMScpLCBkZXNjcmlwdGlvbiA9IGRlc2MpICsgZ3VpZGVzKGZpbGwgPSBGQUxTRSkgKwogICNnZW9tX3BvaW50KGRhdGEgPSB1bmlfc2ltICU+JSBmaWx0ZXIoQVVfVU4gPT0gcGFzdGUodmFyX2luc3QsIHZhcl9kZXB0KSksIAogICMgICAgICAgICAgIGFlcyhzaXplID0gbiksIGNvbCA9ICdkYXJrcmVkJykgKyAKICBnZW9tX3BvaW50KGFlcyhzaXplID0gbiwgY29sID0gZnV0dXJlX3RyZW5kKSwgYWxwaGEgPSAwLjUpICsKICBnZW9tX3RleHRfcmVwZWwoIAogICAgZGF0YSA9dW5pX3NpbSAlPiUgc2xpY2VfbWF4KG9yZGVyX2J5ID0gbiwgbiA9IDUpICU+JSBmaWx0ZXIoQVVfVU4gIT0gcGFzdGUodmFyX2luc3QsIHZhcl9kZXB0KSksICMgRmlsdGVyIGRhdGEgZmlyc3QKICAgIGFlcyhsYWJlbCA9IEFVX1VOKSwKICAgIGJveC5wYWRkaW5nID0gMSwgbWF4Lm92ZXJsYXBzID0gSW5mKSArCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gMCwgc2xvcGUgPSAxLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBjb2wgPSAnc25vdzMnKSArCiAgc2NhbGVfY29sb3VyX2dyYWRpZW50KGxvdyA9ICJibHVlIiwgaGlnaCA9ICJyZWQiLCBuYW1lID0gIkxlYWQtTGFnIFNjb3JlIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArCiAgbGFicyh4ID0gJ1NpbWlsYXJpdHkgdG8gcGFzdCcsCiAgICAgICB5ID0gJ1NpbWlsYXJpdHkgdG8gZnV0dXJlJywKICAgICAgIHRpdGxlID0gcGFzdGUoJ0ZpZWxkIExlYWQtTGFnIEFuYWx5c2lzOicsIHZhcl9pbnN0LCB2YXJfZGVwdCwgc2VwID0gJyAnKSwKICAgICAgIHN1YnRpdGxlID0gcGFzdGUoJ1RpbWVmcmFtZTonLCBQWV9taW4sICctJywgUFlfbWF4ICwgc2VwID0gJyAnKSwKICAgICAgIGNhcHRpb24gPSAneCBhbmQgeSBheGlzJykKIyArIGxpbXMoeCA9IGMoMC42MjUsIDAuNzI1KSwgeSA9IGMoMC42MjUsIDAuNzI1KSkKYGBgCgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkVYVCBQQVJUICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CgojIENvbGxhYm9yYXRpb24gCgpgYGB7cn0KZWxfaW5zdCA8LSByZWFkUkRTKHBhc3RlMCgnLi4vLi4vdGVtcC9lbF9pbnN0XycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgoKYGBge3J9CmdfaW5zdCA8LSBlbF9pbnN0ICU+JSBhc190YmxfZ3JhcGgoZGlyZWN0ZWQgPSBGQUxTRSkgJUU+JQogIGZpbHRlcih3ZWlnaHQgPj0gY3V0b2ZfZWRnZV9jaXQgKSAlTj4lCiAgZmlsdGVyKCFub2RlX2lzX2lzb2xhdGVkKCkpCmBgYAoKIyMgQ29sbGFib3JhdGlvbiBuZXR3b3JrIAoKYGBge3IsIGZpZy5oZWlnaHQ9IDEwLCBmaWcud2lkdGg9MTV9CmdfaW5zdCAlTj4lIAogIG11dGF0ZShjZW50ID0gY2VudHJhbGl0eV9kZWdyZWUod2VpZ2h0cyA9IHdlaWdodCkpICU+JQogIGZpbHRlcihuYW1lID09IHBhc3RlKHZhcl9pbnN0LCB2YXJfZGVwdCkgIHwgcmFuaygtY2VudCkgPD0gMTAwICkgJT4lCiAgZ2dyYXBoKGxheW91dCA9ICJmciIpICsgCiAgZ2VvbV9lZGdlX2xpbmsoYWVzKHdpZHRoID0gd2VpZ2h0LAogICAgICAgICAgICAgICAgICAgICAjY29sb3IgPSAuTigpJG5hbWVbZnJvbV0gPT0gcGFzdGUodmFyX2luc3QsIHZhcl9kZXB0KSB8IC5OKCkkbmFtZVtmcm9tXSA9PSBwYXN0ZSh2YXJfaW5zdCwgdmFyX2RlcHQpLAogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAod2VpZ2h0ID49IHdlaWdodCAgJT4lIHF1YW50aWxlKDAuMjUpKSkKICAgICAgICAgICAgICAgICAsIGFscGhhID0gMC4yNSkgICsgCiAgZ2VvbV9ub2RlX3BvaW50KGFlcyhzaXplID0gY2VudCksIGNvbCA9ICdzdGVlbGJsdWUxJykgICsgCiAgZ2VvbV9ub2RlX3RleHQoYWVzKGxhYmVsID0gbmFtZSwgCiAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBjZW50LAogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAoY2VudCA+PSBjZW50ICAlPiUgcXVhbnRpbGUoMC44KSkpLCByZXBlbCA9IFRSVUUpICsKICAjdGhlbWVfZ3JhcGgoYmFzZV9mYW1pbHkgPSAiQXJpYWwiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsKICBzY2FsZV9lZGdlX3dpZHRoX2NvbnRpbnVvdXMocmFuZ2UgPSBjKDAuNSwgNSkpICArCiAgc2NhbGVfZWRnZV9jb2xvdXJfbWFudWFsKHZhbHVlcyA9IGMoImdyZXkiLCAicmVkIiksIG5hbWUgPSAnMXN0IGRlZ3JlZScpICsKICBzY2FsZV9zaXplKHJhbmdlID0gYygwLjUsMTApKSAKYGBgCgojIEVuZG5vdGVzCgpgYGB7cn0Kc2Vzc2lvbkluZm8oKQpgYGAKCjwhLS0tCiMgU2VlZCBBcnRpY2xlcwoKKipOb3RlOioqIFRoZSBzZWVkIGFydGljbGVzIGRlZW1lZCByZXByZXNlbnRhdGl2ZSBmb3IgdGhlIGFjdGl2ZSBhcmVhcyBvZiByZXNlYXJjaCBpbiB0aGUgaW5zdGl0dXRpb24sIGFuZCBpbmNsdWRlIGF1dGhvcnMgYWZmaWxpYXRlZCB3aXRoIHRoZSBpbnN0aXR1dGlvbi4gVGhlIGRlcGFydG1lbnRzIHJlc2VhcmNoIGZpZWxkIGlzIGlkZW50aWZpZWQgYnkgc2VsZWN0aW5nIHRoZSAyMDAwIG1vc3Qgc2ltaWxhciBwdWJsaWNhdGlvbnMgdG8gdGhlIHNlbGVjdGVkIHNlZWQgYXJ0aWNsZXMuIFNlZSBgVGVjaG5pY2FsIGRlc2NyaXB0aW9uYGZvciBhZGRpdGlvbmFsIGV4cGxhbmF0aW9ucy4KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpzZWVkIDwtY29udmVydDJkZihmaWxlID0gcGFzdGUwKCcuLi8uLi9kYXRhL3NlZWRzL3Njb3B1c18nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICdfc2VlZF9zZWxlY3QuY3N2JyksIGRic291cmNlID0gInNjb3B1cyIsIGZvcm1hdCA9ICJjc3YiKSAlPiUKICBhc190aWJibGUoKSAlPiUKICBtdXRhdGUoc2VlZCA9IFRSVUUpIApgYGAKCmBgYHtyfQpzZWVkICU+JQogIHNlbGVjdChBVSwgUFksIFRJLCBKSSkgJT4lCiAgbXV0YXRlKEFVID0gQVUgJT4lIHN0cl90cnVuYygzMCksCiAgICAgICAgIFRJID0gVEkgJT4lIHN0cl90cnVuYygxMDApLAogICAgICAgICBKSSA9IEpJICU+JSBzdHJfdHJ1bmMoMzApKSAlPiUKICBrYWJsZSgpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIGZvbnRfc2l6ZSA9IDEwKQpgYGAKCi0tLT4K